package com.sinosoft.perfect.system._user.service;

import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.util.List;

import com.sinosoft.perfect.system._.po.TUser;
import com.sinosoft.perfect.system._.po.TUserImg;
import com.sinosoft.perfect.system._.po.TUserInformation;
import com.sinosoft.perfect.system._.po.TUserRolebusinessRelation;
import com.sinosoft.perfect.system._.po.TUserUnitRelation;
import com.sinosoft.perfect.system._user.formBean.UserForm;
import com.sinosoft.perfect.system._user.vo.UserStaticVO;
import com.sinosoft.perfect.system._user.vo.UserUnitVO;

public interface IUserService {

	/**
	 * 增加用户，同时增加用户详细、用户头像、用户单位关系
	 */
	public String insertTUser(String unitId, TUser tuser) throws Exception;

	/**
	 * 增加用户、组织机构关系
	 */
	public String insertTUserUnit(TUserUnitRelation tuserunit) throws SQLException;

	/**
	 * 批量增加用户、组织机构关系，多用户
	 */
	public void insertTUsersUnit(String unitId, String userIds) throws SQLException;

	/**
	 * 批量增加用户、组织机构关系，多组织机构
	 */
	public void insertTUserUnits(String userId, String unitIds) throws SQLException;

	/**
	 * 增加用户、业务角色关系
	 */
	public String insertTUserRoleBusiness(TUserRolebusinessRelation tuserrolebusiness) throws SQLException;

	/**
	 * 查询用户
	 */
	public List<TUser> selectTUser(TUser tuser) throws SQLException;

	/**
	 * 查询用户详细信息
	 */
	public List<TUserInformation> selectTUserInfo(TUserInformation tuserinfo) throws SQLException;

	/**
	 * 查询用户头像
	 */
	public List<TUserImg> selectTUserImg(TUserImg tuserimg) throws SQLException;

	/**
	 * 查询组织机构下的用户
	 */
	public List<UserForm> selectTUserFromUnit(UserForm userForm) throws SQLException;

	/**
	 * 查询业务角色下的用户
	 */
	public List<UserForm> selectTUserFromRoleBusiness(UserForm userForm) throws SQLException;

	public List<TUser> selectTUserDetached(TUser tuser) throws SQLException;

	/**
	 * 查询是否有同名用户，1：有，0：没有
	 */
	public int selectExistTUser(UserForm userform) throws SQLException;

	/**
	 * 查询组织机构下是否有同名用户，1：有，0：没有
	 */
	public boolean selectExistTUserFromUnit(String userId, String unitId) throws SQLException;

	/**
	 * 查询业务角色下是否有同名用户，1：有，0：没有
	 */
	public boolean selectExistTUserFromRoleBusiness(String userId, String roleBusinessId) throws SQLException;

	/**
	 * 更新时，查询是否有同名用户，1：有，0：没有
	 */
	public int selectExistTUserForUpdate(TUser user) throws SQLException;

	/**
	 * 组织机构用户表，查询排序编码
	 */
	public Long selectTUserSortNumFromUnit(String unitId, String userId) throws SQLException;

	/**
	 * 组织机构用户表，查询最大排序编码
	 */
	public Integer selectTUserMAXSortNumFromUnit(String unitId) throws SQLException;

	/**
	 * 业务角色用户表，查询排序编码
	 */
	public Long selectTUserSortNumFromRoleBusiness(String roleBusinessId, String userId) throws SQLException;

	/**
	 * 业务角色用户表，查询最大排序编码
	 */
	public Integer selectTUserMAXSortNumFromRoleBusiness(String roleBusinessId) throws SQLException;

	/**
	 * 联合用户表和用户单位关系表，用户构建用户单位树查询
	 */
	public List<UserUnitVO> selectTUserAndTUnit(String unitId) throws SQLException;

	public List<UserStaticVO> selectTUserStatic(UserStaticVO userStatic) throws SQLException;

	/**
	 * 查询用户姓名，先查用户详细表username，没有则查询用户表中loginname
	 */
	public String selectTUserName(String userMainId) throws SQLException;

	/**
	 * 更新用户信息
	 */
	public void updateTUserByPK(TUser tuser) throws Exception;

	/**
	 * 更新用户详细信息
	 */
	public void updateTUserInfoByPK(TUserInformation tuserinfo) throws SQLException;

	/**
	 * 更新用户头像
	 */
	public void updateTUserImg(TUserImg tuserimg) throws SQLException;

	/**
	 * 删除用户所有信息，包括用户详细、用户头像、用户单位关系
	 */
	public boolean deleteTUserAll(String userId) throws SQLException;

	/**
	 * 删除用户单位关系
	 */
	public boolean deleteTUserUnit(String userId, String unitId) throws SQLException;

	/**
	 * 删除用户业务角色关系
	 */
	public void deleteTUserRoleBusiness(String userId, String roleBusinessId) throws SQLException;

	/**
	 * 校验用户密码
	 */
	public int validatePassword(TUser user) throws SQLException, NoSuchAlgorithmException;

	/**
	 * 组织机构下，用户排序
	 */
	public boolean sortUserInUnit(long newSortNumber, String userId, String unitId) throws SQLException;

	/**
	 * 业务角色下，用户排序
	 */
	public boolean sortUserInRoleBusiness(long newSortNumber, String userId, String roleBusinessId) throws SQLException;
	
	public List<TUser> selectTUsersInfoByUserids(String userids) throws SQLException;
	
	/**
	 * author:fys;(11/07/13)
	 * @param addUserIds 需要为当前unit加入的用户们，用','隔开;
	 * @param delUserIds 需要从当前unit中删除的用户们，用','隔开;
	 * @param unitId 当前组织机构/单位
	 * @return flag (flag >= 0 :正常做了相关的业务操作 , flag == -1 : 表示为执行业务操作;
	 * @throws SQLException
	 */
	public int insertAndDeleteUsersToUnit(String addUserIds,String delUserIds,String unitId) throws SQLException;

	/**
	 * 为查询系统角色下的用户信息
	 * @param roleSystemId
	 * @return users
	 * @throws SQLException
	 */
	public List<UserForm> selectTUserFromRoleSystem(String roleSystemId) throws SQLException;

}
